#include "../import/head.h"
#include "get_package.h"
#include "../data_struct/head.h"
#include "../global/head.h"
#include "../macro/head.h"
#include "../msg/head.h"
#include "os_init.h"

///////////////////////////////////////////////////////////////////////////////////////////////
// 

namespace xos_sgsj
{
    get_package::get_package()
    {
        m_pPackageMgr = 0;
        m_pPackage = 0;
    }

    get_package::~get_package()
    {
        term();
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 

    int get_package::run_task( xos::i_msg * pMsg )
    {
        int ret = 0;
        
        data * p = g_pSysData->m_pPool->m_data_pool.GetItem();
        p->init();
        p->m_nMsg = MSG_PACKAGE;
        p->m_pMsg = pMsg;
        g_pSysData->notify( p );
        p = 0;

        return ret;
    }

    int get_package::init()
    {
        int ret = 0;

        if( 0 == ret )
        {
            xos_package::create( g_pSysData->m_os.m_pXos, g_pSysData->m_os.m_pCommon, g_pSysData->m_os.m_pEncryptMgr, g_pSysData->m_os.m_pLog, &m_pPackageMgr );
            if( !m_pPackageMgr )
            {
                ret = 1;
            }
        }

        if( 0 == ret )
        {
            ret = m_pPackageMgr->create( &m_pPackage );
        }

        if( 0 == ret )
        {
            m_pPackageMgr->set_callback( g_pSysData->m_os.m_pMiscCallbackThread, this );
            m_pPackageMgr->set_work_thread( g_pSysData->m_os.m_pMiscCallbackThread );
            g_pSysData->m_os.m_pPackageMgr = m_pPackageMgr;
            g_pSysData->m_os.m_pPackage = m_pPackage;
        }

        return ret;
    }

    int get_package::term()
    {
        int ret = 0;

        g_pSysData->m_os.m_pPackageMgr = 0;
        g_pSysData->m_os.m_pPackage = 0;

        if( m_pPackage )
        {
            m_pPackage->release();
            m_pPackage = 0;
        }

        if( m_pPackageMgr )
        {
            m_pPackageMgr->release();
            m_pPackageMgr = 0;
        }

        return ret;
    }

} // xos_sgsj
